<?php
class ConsultaController extends Zend_Controller_Action{
    
    /**
     *
     * @var Zend_Session_Namespace 
     */
    private $session;

    public function init() {
        parent::init();
        $this->session = new Zend_Session_Namespace("consulta");
    }
    
    
    public function listarAction(){
        $model = new Application_Model_Consulta();
        $this->view->consultas = $model->getAll();
        
    }
    
    public function elejirespecialidadAction(){
        
        //Deserializo el usuario Seleccionado para mostrar los datos x pantalla///
        include_once("Clases/Persona.php");
        $usuarioSerializado=$this->session->__get("usuSel");
        $usuarioSeleccionado=unserialize($usuarioSerializado);
        $this->view->usuSel=$usuarioSeleccionado;
        ////////////////////////////////////////////////////////////////////////// 
        
        if($this->_hasParam('idEsp')){
            $idEsp=$this->_getParam("idEsp");
            $esp=$this->_getParam("Esp");
            //Guardo en nombre de la Especialidad en la seccion, la ci y la id de la especialidad///
            $this->session->__set("Esp",$esp );
            $this->session->__set("IdEsp", $idEsp);
            //////////////////////////////////////////////////////
            $this->_redirect("/consulta/elejirmedico");
        } 
        else{
         include_once("Clases/Especialidad.php");
         
         $model = new Application_Model_Especialidades();
         
         $this->view->verReq=1;
         
         $especialidades = $model->getAll();
         $especialidadesArr= new ArrayObject();
         $modelProfesio= new Application_Model_Profesio();
         foreach($especialidades as $esp){
             $especialidadObj = new Especialidad();
             $especialidadObj->setId($esp->NUMERO);
             $especialidadObj->setNombre($esp->NOMBRE);
             $medicos=$modelProfesio->getAllMedicoConEsp($esp->NUMERO);
             foreach($medicos as $medico){
                 $especialidadObj->agregarMedico($medico->CAJA_PROF, $medico->NOMBRE." ".$medico->APELLIDO);
             }
             $especialidadesArr[$esp->NUMERO]=$especialidadObj;
         }
         
         $this->view->especialidades=$especialidadesArr;
    }
    
    }

    
    public function elejirmedicoAction(){
        //Deserializo el usuario Seleccionado para mostrar los datos x pantalla///
        include_once("Clases/Persona.php");
        $usuarioSerializado=$this->session->__get("usuSel");
        $usuarioSeleccionado=unserialize($usuarioSerializado);
        $this->view->usuSel=$usuarioSeleccionado;
        //////////////////////////////////////////////////////////////////////////
        $this->view->verReq=1;
        $modelProfesio= new Application_Model_Profesio();
        $modelConsulta= new Application_Model_Consulta();
        $modelHistorico= new Application_Model_Historico();
        $idEsp = $this->session->__get("IdEsp");
        $nomEsp = $this->session->__get("Esp");
        $this->view->es=$idEsp;
        $ci=$usuarioSeleccionado->getNroHistorico();
        //Esto sirve para saber si para la especialidad selecionada ya tiene consulta para el futuro
        $saberSiTieneYaConsultaEspecialidad = $modelConsulta->saberSiTieneYaConsultaEspecialidad($ci, $idEsp);
        $this->view->consultasEspecialidad= $saberSiTieneYaConsultaEspecialidad;
       //////////////////////////////////////////////////////////////////////////////////////////////
        
        //Setea los medicos con la especialidad seleccionada
        $medicos=$modelProfesio->getAllMedicoConEsp($idEsp);
        $this->view->medicos=$medicos;
        $cantidadConsultasMedico = new ArrayObject();
        //obtengo la cantidad de consultas tiene ese medico
        foreach ($medicos as $medico){
            $cantidad=$modelConsulta->saberCantidadConsultasEsp($idEsp,$medico->CAJA_PROF);
            $cantidadConsultasMedico[$medico->CAJA_PROF]=$cantidad;
        }
        //print_r($cantidadConsultasMedico);
        $this->view->consultasDisp=$cantidadConsultasMedico;
        //Seto los datos del historico
        $serviceNumeros= new Application_Service_Numeros();
        $fechaDesde=$serviceNumeros->restarAniosAFecha(date("Y/m/d"), 2);
        //print_r($usuarioSeleccionado->getNroHistorico());
        $historico=$modelHistorico->getHistorico($usuarioSeleccionado->getNroHistorico(), $fechaDesde);
        //print_r($historico);
        //print_r($fechaDesde);
        $this->view->historico=$historico;
        $this->view->nombreEsp=$nomEsp;
    }
    
    public function elejirconsultademedicoAction(){
                //Deserializo el usuario Seleccionado para mostrar los datos x pantalla///
                include_once("Clases/Persona.php");
                $usuarioSerializado=$this->session->__get("usuSel");
                $usuarioSeleccionado=unserialize($usuarioSerializado);
                $this->view->usuSel=$usuarioSeleccionado;
                //////////////////////////////////////////////////////////////////////////
                $this->view->verReq=1;
                include_once("Clases/Consulta.php");
                $check = new Application_Model_Check();
                //Puede pasar que cuando seleccione un consulta, esta pueda estar tomada o siendo usada x otro agente
                //Por lo tanto en verficarinscripcion que es el metodo que verifica eso una vez seleccionada, si sucede algo de eso, redirecciona a este controlador y x eso tengo el if
               // x si pasa algo de eso no sete los valores denuevo xq explota xq hace el get de algo q venia del view anterior pero como no viene del anteriror "elejir medico" no estan
                //Un caso RE salado es si el agente quiere apretar el boton de volver para atras ¬¬ entonces tengo que preguntar si al volver para atras tiene alguno de los parametros que se setan para que se muestren
                //Si, hay alguno en la sesion, eso quiere decir que el fujo viene de una pagina adelante entonces si sucede esto tengo que evitar que se cargen datos como mas abajo xq va a buscar de la vista anterioor y no estan and BOOM jjaja :)
                if($this->session->__get("enuso")==1 || $this->session->__get("tomada")==1 || $this->session->__get("cancelado")==1 || $this->session->__get("idcons")!=""){
                        //Si es en uso o tomada muestra el cartel, en caso de que fuera cancelar tiene que igual q controlarse xq x mas q no tenga ningun cartel sino la varibale queda en cancelar y si despues se empiza de 0 con otra consulta
                        //va a entrar x ak y no va  atraer los datos de la que se fueron recolectado anteriormente en las otras vistas.
                        //El verificarAtras es x si viene de apretar el boton ahi al igual que en el cancelar hay que desbloquear la consulta para que no quede tilada
                        if($this->session->__get("enuso")==1){
                            $this->view->mensaje="La consulta seleccionada esta siendo utilizada por un agente y es probable que ya no este disponible";
                            $this->session->__unset("enuso");
                            
                        }else{
                            if($this->session->__get("tomada")==1){
                                $this->view->mensaje="La consulta ha sido tomada por otro operario, seleccione otra";
                                $this->session->__unset("tomada");
                            }else{
                                 if($this->session->__get("cancelado")==1){
                                     $check->debloquearConsulta($this->session->__get("idcons"));
                                     $this->session->__unset("cancelado");
                                 }else{
                                     if($this->session->__get("idcons")!=""){
                                        $check->debloquearConsulta($this->session->__get("idcons")); 
                                        $this->session->__unset("idcons"); 
                                     }
                                 }
                            }
                            
                        }
                        $model = new Application_Model_Consulta();
                        //Levanto de la sesion el id de la especialidad y la caja_prof //////////////////
                        $idEsp=$this->session->__get("IdEsp");
                        $doc=$this->session->__get("caja_prof");
                        /////////////////////////////////////////////////////////////////////////////////
                        $consultas=$model->getConsultasEsp($idEsp, $doc);
                        $consultasVista = array();
                        $servicio = new Application_Service_Numeros();
                        foreach ($consultas as $c){
                            //Puede pasar que atienda demañana y de tarde entonces para solucionar esto en el dia y hora
                            //tienen  medico(mañana) y medico(tarde) pero a su vez ese profesional puede tener 2 especialidades
                            //Para la maña y la tarde, entonces hay que pasarle la especialidad tambien.
                            $horaInicio=$model->saberHoraComienzoConsulta($doc, $c->FECHA,$idEsp);
                            $horaInicio=$servicio->devolverHora($horaInicio);
                            $con = new Consultaclase($servicio->devolverFecha($c->FECHA),$servicio->devolverHora($c->HORA),$c->IdConsulta,$servicio->saberDiaDeSemanaEnFecha($servicio->devolverFecha($c->FECHA)),$horaInicio,$idEsp,$doc);
                            $consultasVista[]=$con;
                        }
                        $this->view->consultas=$consultasVista;
                    
                }else{
                    $doc=$this->_getParam("doc");
                    $nom=  $this->_getParam("nom");
                    $ap=  $this->_getParam("ap");
                    //Guardo las variables nombre del medico el aplllido y la caja_prf (doc) en la secion
                    $this->session->__set("nom", $nom);
                    $this->session->__set("ap", $ap);
                    $this->session->__set("caja_prof", $doc);
                    ////////////////////////////////////////////////////////////////
                    $model = new Application_Model_Consulta();
                    //Levanto de la sesion el id de la especialidad seleccionada mas arriba////
                    $idEsp=$this->session->__get("IdEsp");
                    //////////////////////////////////////////////////////////////////////////
                    $consultas=$model->getConsultasEsp($idEsp, $doc);
                    $consultasVista = array();
                    $servicio = new Application_Service_Numeros();
                    foreach ($consultas as $c){
                            $horaInicio=$model->saberHoraComienzoConsulta($doc, $c->FECHA,$idEsp);
                            $horaInicio=$servicio->devolverHora($horaInicio);
                            $con = new Consultaclase($servicio->devolverFecha($c->FECHA),$servicio->devolverHora($c->HORA),$c->IdConsulta,$servicio->saberDiaDeSemanaEnFecha($servicio->devolverFecha($c->FECHA)),$horaInicio,$idEsp,$doc);
                            $consultasVista[]=$con;
                    }
                    $this->view->consultas=$consultasVista;              
                }
                
   }                
                   
    public function verificarinscripcionAction(){
                //Deserializo el usuario Seleccionado para mostrar los datos x pantalla///
                include_once("Clases/Persona.php");
                $usuarioSerializado=$this->session->__get("usuSel");
                $usuarioSeleccionado=unserialize($usuarioSerializado);
                $this->view->usuSel=$usuarioSeleccionado;
                //////////////////////////////////////////////////////////////////////////
                $this->view->verReq=1;
                $check = new Application_Model_Check();
                $model= new Application_Model_Consulta();
                $registarActualizacion = new Application_Model_Update();
                //Esto es x si el agente antes de verificar la consulta, decide cancelarla
                if($this->_hasParam("cancelar")){
                    $check->debloquearConsulta($this->session->__get("idcons"));
                    $fechaConsulta= $this->session->__get("fechaConsulta");
                    $registarActualizacion->registrarActializacion($this->session->__get("idcons"),$fechaConsulta,$usuarioSeleccionado->getNroHistorico(),2);
                    $this->session->__set("cancelado",1);
                    $this->_redirect("/consulta/elejirconsultademedico");
                }else{
                //Si esta verificado entonces guarda los cambios
                if($this->_hasParam("v")){
                    $fechaConsulta= $this->session->__get("fechaConsulta");
                    $model->inscribirAConsulta($usuarioSeleccionado->getNroHistorico(),$this->session->__get("idcons"),$fechaConsulta);
                    $registarActualizacion->registrarActializacion($this->session->__get("idcons"),$fechaConsulta,$usuarioSeleccionado->getNroHistorico(),1);
                    $this->view->confirmado=1;
                    $check = new Application_Model_Check();
                    $check->debloquearConsulta($this->session->__get("idcons"));
                }
                //Si no esta verificada la consulta entonces, quiere decir que voy mostrar los datos x primera vez
                else{
                    
                    $this->view->ci = $usuarioSeleccionado->getDocumento();
                    $model= new Application_Model_Consulta();
                    //Tomo el idConsulta que viene x parametro
                    $idConsulta=$this->_getParam("cons");
                   
                    
                    $this->view->idEsp=$this->session->__get("IdEsp");
                    $this->view->cajaProf=$this->session->__get("doc");
                    $this->view->dia=$this->_getParam("dia");
                    //echo $idConsulta;
                    //Primero verifico que este libre xq puede pasar que se haya tomado mientras el agente selecciona la consulta
                    $fechaConsulta=$this->_getParam("fec");
                    $estado = $model->saberSiLaConsultaEstaLibre($idConsulta,$fechaConsulta);
                                           
                    if($estado=='libre'){
                        
                        //Si esta libre guardo en el namespace el id de la consulta que viene de la vista anterior donde elejia la consulta
                        //Este id me va a servir tambien para que si el agente aprita el boton atras yo pregunte en elejirconsultamedicovsi esta seteada, si esta seteada entonces qurie decir q me aprto el botn de atras 
                        $this->session->__set("idcons", $this->_getParam("cons"));
                        $registarActualizacion->registrarActializacion($this->session->__get("idcons"),$fechaConsulta,$usuarioSeleccionado->getNroHistorico(),0);
                        $bloquearConsulta = $check->bloquearConsulta($this->session->__get("idcons"));
                        //Si al bloquearla esta en uso entonces devuelvo a la vista que esta en uso
                        //echo $bloquearConsulta;exit;
                        if($bloquearConsulta==0){
                            $this->session->__set("enuso", 1);
                            $this->_redirect("/consulta/elejirconsultademedico");
                        }else{ 
                            $this->view->hora=$this->_getParam("hor");
                            $this->view->fecha=$this->_getParam("fec");
                            $this->view->nombreMedico=  $this->session->__get("nom");
                            $this->view->especialidad=  $this->session->__get("Esp");
                            $this->view->apellidoMedico=  $this->session->__get("ap");
                            //Guardo la fecha en la secion para luego al momento de guardar la CI tambien le paso la fecha x el tema de las idConsulta
                            $this->session->__set("fechaConsulta",$this->_getParam("fec"));
                        }
                    }
                    //Si no esta libre, entonces le mando a la vista que esta tomada
                    else{
                        $this->session->__set("tomada",1);
                        $this->_redirect("/consulta/elejirconsultademedico");
                    }
            }
        }
    }
    
    public function demandaAction(){
        //Deserializo el usuario Seleccionado para mostrar los datos x pantalla///
        include_once("Clases/Persona.php");
        $usuarioSerializado=$this->session->__get("usuSel");
        $usuarioSeleccionado=unserialize($usuarioSerializado);
        $this->view->usuSel=$usuarioSeleccionado;
        //////////////////////////////////////////////////////////////////////////
        $caja_prof=$this->_getParam("doc");
        $fechaActual = date("Y/m/d");
        $ci = $usuarioSeleccionado->getNroHistorico();
        $idEsp = $this->session->__get("IdEsp");
        $modelDemanda = new Application_Model_DemandaIns();
        if($this->_hasParam("mod")){
            //Si es 1 entonces quiere decir que es demanda insatisfecha para la especialidad
            if($this->_getParam("mod")==1){
                $modelDemanda->registrarDemandaEsp($ci, $idEsp, $fechaActual);
            }
            //Si es 2 entonces quiere decir q es demanda insatisfecha para la especialidad-medico
            if($this->_getParam("mod")==2){
                $modelDemanda->registrarDemandaEspMed($ci,$idEsp,$caja_prof,$fechaActual);
            }
        }
        $this->_redirect("/consulta/elejirmedico");
    }


    
    public function webAction(){
         /* $ci=  $this->_getParam('ci');
          $client = new Zend_Soap_Client("http://wsafiliados.asse:8080/WSPersonas/servlet/aserver_personas?wsdl");        
          $retorno=$client->execute(array('Nro_doc' => $ci));
          $variables = get_object_vars($retorno);
          $usu=$variables["Usuasse"];
          $usu2=get_object_vars($usu);
          //Si la ci tiene mas de un usuario asociado me devuelve un arry con varios stdclass y en cada uno un array con los datos
          //osea que el $usu[0]=primer usuario, $usu[1]=segundo usuario...
          $usu3=$usu2["UsuAsse.UsuAsseItem"];
          //En caso de que sea una persona sola no te devuelve un array en la pocision 0 con la persona
          //te devuelve un objeto que si lo convertis a array ya tenes todos los datos entonces si pregunto x la posicon 0 explota
          //encambio si pregunto si es un objteo primero y lo convierto no entro en el foreach para que no pregunte x la posicion 0//
          //Osea cuando son muchas personas me devuelve un array con todas las personas, encambio cuando es una sola,
          //me devuelve un objeto con los datos sin arreglo.
          if(is_object($usu3)){
             $personas=get_object_vars($usu3);
             $this->session->__set("asseUsuario", $personas);
          }else{
              $personas=array();
              foreach($usu3 as $p){
                  $persona=get_object_vars($p);
                  $personas[]=$persona;
              }
              $this->session->__set("asseUsuario", $personas);
          }
          
            print_r($this->session->__get("asseUsuario"));*/
        //$ser= new Application_Service_AsseWebService();
        //$ci=  $this->_getParam('8242836');
        //$datosUsuario = $ser->getDatosUsuario('8242836');
         $servicioUsuario= new Application_Service_Usuario();
         $d=$servicioUsuario->devolverUsuariosWebService('8242836');
        print_r($d);

          exit;
    }
    
    
    public function testAction(){
$model = new Application_Model_Especialidades();
         
    
         
         $especialidades = $model->getAll();
         print_r($especialidades);exit;
    }
    
}
